package main

import (
	"fmt"
)


func main() {
	//	mainvar name string
	//	var age int
	//
	//	age = 23
	//	name = "JOJO"
	//	fmt.Println(name,age)
	//	a,_:=foo()
	//	fmt.Print(a)
	//	fmt.Print(x)
	//	v:=13_234
	//	fmt.Println(v)
	//	fmt.Printf("\n%d\n",1)
	//	//十进制是默认格式，八进制以0开头，十六进制以0x开头
	//	ten := 10
	//	var ten1 int = 017
	//	ten2 := 0x23
	//	fmt.Println(ten,ten1,ten2)
	//	//使用格式输出int，使用%d
	//	fmt.Printf("%d",ten2)
	//	fmt.Printf("\n%o",ten2)
	//	fmt.Printf("\n%x",ten2)
	//	fmt.Printf("\n%.3f\n", math.Pi)
	//	b := false
	//	if b {
	//		fmt.Println("jojo")
	//	}else{
	//		fmt.Println("dio")
	//	}
	//	var s = 'a'
	//	fmt.Println(s)
	//	var muil = `111
	//111
	//111
	//	`
	//	fmt.Println(muil)
	//	fmt.Println(fmt.Sprintf("%s%d%s","dio",1,"test"))
	//	fmt.Println(strings.Split("abc d"," ")[0])
	//	fmt.Println(strings.HasPrefix("cctv.mp4","cc"))
	//	fmt.Println(strings.HasSuffix("cctv.mp4",".mp4"))
	//	fmt.Println(strings.Index("abcdefgfg","fg"))//第一次出现的位置
	//	fmt.Println(strings.Index("abcdefgfg","fg"))//最后次出现的 位置
	//	fmt.Println(strings.Join([]string{"a","b"},"g"))
	//	s2 := "红萝卜"
	//	runes2 := []rune(s2)
	//	fmt.Println(runes2)
	//	runes2[0] = '白'
	//	fmt.Println(string(runes2))
	//s1 := "az欢迎使用golang"
	//temp := []rune(s1)
	//fmt.Println(temp)
	//count := 0
	//for _, v := range temp {
	//	if v > 256 {
	//		count++
	//	}
	//}
	//fmt.Println(count)
	//foo(2)
	//foo1()
	//slicem()
	//foo3()
	//f:=adder()
	//	//fmt.Println(f(30))
	//var a = new(int)
	//var b = 2
	//c := &b
	//*c = 3
	//fmt.Println(*c,b)
	//f1(f2,3,4)
	//x := 1
	//y := 2
	//defer calc("AA", x, calc("A", x, y)) //A 1 2 3   AA 1 3 4
	//x = 10
	//defer calc("BB", x, calc("B", x, y))//B 10 2 12  BB 10 12 22
	//y = 20
	//BB
	funcA()
	funcB()
	funcC()
}
func funcA() {
	fmt.Println("func A")
}

func funcB() {
	defer func() {
		err := recover()
		//如果程序出出现了panic错误,可以通过recover恢复过来
		if err != nil {
			fmt.Println("recover in B",err)
		}
	}()
	panic("panic in B")
}

func funcC() {
	fmt.Println("func C")
}
func calc(index string, a, b int) int {
	ret := a + b
	fmt.Println(index, a, b, ret)
	return ret
}
//需求：设计一个包装函数,传入的参数为一个函数

func f1(f func(x,y int) int,a,b int) {
	c:=f(a,b)
	fmt.Println(c)
}

func f2(x, y int) int {
	return x+y
}
func foo(i int) {
	var s = [...]int{1, 2, 2, 3, 3, 4, 5, 6}
	count := 0
	for _, v := range s {
		if i == v {
			count++
		}
	}
	fmt.Println(count)
}
func foo1() {
	v := 1
	if v<10{
		fmt.Println("ok")
	}
	switch {
	case v<10:
		fmt.Println(v)
	}
}
func slicem() {
	a := make([]int,3,6)
	a[0] = 2
	
	fmt.Println(a)
	fmt.Println(cap(a))
}
func foo3()  {

	var a = []string{}
	for i := 0; i < 10; i++ {
		a = append(a, fmt.Sprintf("%v", i))
	}
	fmt.Println(a)
}
func adder() func(int) int {
	var x int
	return func(y int) int {
		x += y
		return x
	}
}